package demo;

import java.awt.*;

//抽象类中也可以有普通的变量和方法，但是抽象类不可以实例化的，就是为了被继承的。
 abstract class Shape{//abstract修饰的是一个抽象类
    public int a;

    //被abstract修饰的方法叫抽象方法，可以没有具体的实现方法。当一个类有抽象方法，该类必须是抽象类
    public abstract  void draw();

    public Shape(){//创建一个构造方法让子类帮助实例化自己的成员变量

    }

}

//继承一个抽象类时，必须重写父类的全部抽象方法
class Rect extends Shape{
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}


class Crecle extends Shape{
    @Override
    public void draw() {
        System.out.println("圆形");
    }
}

class Flower extends Shape{
    @Override
    public void draw() {
        System.out.println("❀");
    }
}

public class Test {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        Shape shape1 = new Crecle();
        Shape shape2 = new Flower();
        drawMap(shape1);
        drawMap(shape2);
        drawMap(new Rect());//匿名对象


    }
}
